package bible.sunflower.util.ftp;

import java.io.*;

import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
	public class ContinueFTP {
	private FTPClient ftpClient = new FTPClient();
	public ContinueFTP() {
	 ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
	}
	public boolean connect(String hostname, int port, String username, String password) throws IOException {
		ftpClient.connect(hostname, port);
		if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
			if (ftpClient.login(username, password)) {
			 return true;
			}
		}
		disconnect();
		return false;
	}
	public boolean download(String remote, String local) throws IOException {
	ftpClient.enterLocalPassiveMode();
	boolean result;
	File f = new File(local);
	if (f.exists()) {
	OutputStream out = new FileOutputStream(f, true);
	ftpClient.setRestartOffset(f.length());
	result = ftpClient.retrieveFile(remote, out);
	out.close();
	} else {
	OutputStream out = new FileOutputStream(f);
	result = ftpClient.retrieveFile(remote, out);
	out.close();
	}
	return result;
	}
	
	public void disconnect() throws IOException {
	if (ftpClient.isConnected()) {
	 ftpClient.disconnect();
	}
	}
	
	public static void main(String[] args){
	ContinueFTP myFtp = new ContinueFTP();
	try {
	//myFtp.connect("127.0.0.1", 21, "zhangyp", "123456");
		/*
	myFtp.connect("32.186.162.27", 21, "zhangyp", "123456");
	myFtp.download("a.java","G:/a.txt");
	myFtp.disconnect();
	*/
	FileInputStream in=new FileInputStream(new File("G:/a.txt"));  
	boolean flag = uploadFile("32.186.162.27", 21, "zhangyp", "123456", "", "test.txt", in);  
	System.out.println(flag); 
	
	} catch (IOException e) {
	 System.out.println("连接FTP出错:"+e.getMessage());
	}
	}
	
	/**
	 * Description: 向FTP服务器上传文件
	 * @param url FTP服务器hostname
	 * @param port FTP服务器端口
	 * @param username FTP登录账号
	 * @param password FTP登录密码
	 * @param path FTP服务器保存目录
	 * @param filename 上传到FTP服务器上的文件名
	 * @param input 输入流
	 * @return 成功返回true，否则返回false
	 */
	public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
		boolean success = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(url, port);//连接FTP服务器
			//如果采用默认端口，可以使用ftp.connect(url)的方式直接连接FTP服务器
			ftp.login(username, password);//登录
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return success;
			}
			ftp.changeWorkingDirectory(path);
			ftp.storeFile(filename, input);			
			
			input.close();
			ftp.logout();
			success = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return success;
	}
}